package ar.edu.frba.utn.dds.Test;

import java.util.List;

import junit.framework.Assert;

import org.junit.Before;
import org.junit.Test;

import ar.edu.frba.utn.dds.Aterrizar.Aterrizar;
import ar.edu.frba.utn.dds.Excepciones.ConversionException;
import ar.edu.frba.utn.dds.Perfiles.Moroso;
import ar.edu.frba.utn.dds.Perfiles.Solvente;
import ar.edu.frba.utn.dds.Perfiles.VIP;
import ar.edu.frba.utn.dds.Usuario.Usuario;
import ar.edu.frba.utn.dds.Vuelo.Asiento;

import com.lanchita.AerolineaLanchita;
import com.oceanic.AerolineaOceanic;


public class Testing2Entrega {
	public Aterrizar compania;
	public AerolineaLanchita lanchita;
	public AerolineaOceanic oceanic;
	
	@Before
	public void setUp(){
		lanchita= AerolineaLanchita.getInstance();
		oceanic = AerolineaOceanic.getInstance();
		compania=new Aterrizar();
		compania.agregarCompania(lanchita);
//		companias.agregarCompania(oceanic);
			
	}
	
	/////////////////test del usuario
	@Test
	public void buscarAsientosParaElVip() throws ConversionException{
		
		Usuario usuario= new Usuario(null,null,null);
		usuario.setPerfil(new VIP());
		usuario.obtenerPosiblesViajes(null,null,null,null,null,null,compania);
		List<Asiento> asientos=usuario.getAsientosBusqueda();
		Assert.assertEquals(10, asientos.size());
	}
	@Test
	public void buscarAsientosParaElEstandar() throws ConversionException{
		Usuario usuarioEstandar= new Usuario(null,null,null);
		usuarioEstandar.setPerfil(new Solvente());
		usuarioEstandar.obtenerPosiblesViajes(null,null,null,null,null,null,compania);
		List<Asiento> asientosDelEstandar=usuarioEstandar.getAsientosBusqueda();
		Assert.assertEquals(3, asientosDelEstandar.size());
	}
	@Test
	public void buscarAsientosParaElQueNoGarpa() throws ConversionException{
		Usuario usuarioQueNoGarpa= new Usuario(null,null,null);
		usuarioQueNoGarpa.setPerfil(new Moroso());
		usuarioQueNoGarpa.obtenerPosiblesViajes(null,null,null,null,null,null,compania);
		List<Asiento> asientosDelQueNoGarpa=usuarioQueNoGarpa.getAsientosBusqueda();
		
		Assert.assertEquals(3, asientosDelQueNoGarpa.size());
		
	}
	
	@Test 
	public void verificarQueLaBusquedaQuedoGuardadaEnElHistorial() throws ConversionException{
		Usuario usuarioEstandar = new Usuario(null,null,null);
		usuarioEstandar.setPerfil(new Solvente());
		int historialVacio = usuarioEstandar.getBusquedas().size();
		usuarioEstandar.obtenerPosiblesViajes(null,null,null,null,null,null, compania);
		Assert.assertEquals(historialVacio+1, usuarioEstandar.getBusquedas().size());
	}
	
//	@Test
//	public void verifircarQueUnUsuarioPuedeComprar() throws ConversionException{
//		Usuario usuarioVip=new Usuario(null,null,null);
//		usuarioVip.setPerfil(new VIP());
//		usuarioVip.obtenerPosiblesViajes(null,null,null,null,null,null, companias);
//		usuarioVip.comprarAsiento(0);
//		List<Asiento> asientos=usuarioVip.getAsientosBusqueda();
//		Asiento asiento=asientos.get(0);
//		Assert.assertEquals("C", asiento.getEstadoAsiento());
//		
//	}
	
//	@Test (expected= com.lanchita.excepciones.EstadoErroneoException.class)
//	public void verificarQueNoSePuedeComprarUnAsientoYaComprado() throws ConversionException{
//		Usuario usuarioVip=new Usuario(null,null,null);
//		usuarioVip.setPerfil(new VIP());
//		usuarioVip.obtenerPosiblesViajes(null,null,null,null,null,null, companias);
//		
//		Usuario otroUsuarioVip= new Usuario(null,null,null);
//		otroUsuarioVip.setPerfil(new VIP());
//		otroUsuarioVip.obtenerPosiblesViajes(null,null,null,null,null,null,companias);
//		
//		usuarioVip.comprarAsiento(1);
//		
//		otroUsuarioVip.comprarAsiento(1);
//		Assert.assertEquals(0, otroUsuarioVip.getMontoCompras());
//	}
	
//	@Test
//	public void verificarQueAumentoElMontoDeUnUsuarioAlComprar() throws ConversionException{
//		Usuario usuarioVip=new Usuario(null,null,null);
//		usuarioVip.setPerfil(new VIP());
//		usuarioVip.obtenerPosiblesViajes(null,null,null,null,null,null, compania);
//		BigDecimal montoAlInicio=usuarioVip.getMontoCompras();
//		usuarioVip.comprarAsiento(0);
//		List<Asiento> asientos=usuarioVip.getAsientosBusqueda();
//		Asiento asiento=asientos.get(0);
//		Assert.assertEquals(montoAlInicio+asiento.getPrecioTotal(),asiento.getPrecioTotal());
//	}
//	
//	/////////////test de los asientos
//	
//	@Test
//	public void precioDeLosAsientosParaLosQuePagan() throws ConversionException{
//		Usuario usuarioEstandar=new Usuario(null,null,null);
//		usuarioEstandar.setPerfil(new Solvente());
//		String precioAsiento="383.22";
//		usuarioEstandar.obtenerPosiblesViajes("PER","USA","20/12/2012","20:00","21/12/2012","08:00",compania);
//		Asiento asiento = usuarioEstandar.getAsientosBusqueda().get(0);
//		Double precioConTodosLosImpuestos=(Double.parseDouble(precioAsiento))*1.15+ usuarioEstandar.montoRecargo();
//		Assert.assertEquals(asiento.getPrecioTotal()+usuarioEstandar.montoRecargo(), precioConTodosLosImpuestos);
//	}
//	
//	@Test
//	public void precioDeLosAsientosParaLosQueNoPagan() throws ConversionException{
//		Usuario usuarioQueNoGarpa=new Usuario(null,null,null);
//		usuarioQueNoGarpa.setPerfil(new Moroso());
//		String precioAsiento="383.22";
//		usuarioQueNoGarpa.obtenerPosiblesViajes("PER","USA","20/12/2012","20:00","21/12/2012","08:00",compania);
//		Asiento asiento = usuarioQueNoGarpa.getAsientosBusqueda().get(0);
//		Double precioConTodosLosImpuestos=(Double.parseDouble(precioAsiento))*1.15+ usuarioQueNoGarpa.montoRecargo();
//		Assert.assertEquals(asiento.getPrecioTotal()+usuarioQueNoGarpa.montoRecargo(), precioConTodosLosImpuestos);
//	}
	
//	@Test
//	public void esSuperOfertaElDePrimeraClaseYPrecio5Lucas(){
//		Usuario vip=new Usuario(null,null,null);
//		vip.setPerfil(new VIP());
//		Asiento asiento= new Asiento("codigo","5000","P","C","D",null,null,null,null,null,null,null,null,0,companias.getCompanias().get(0));
//		Assert.assertEquals(true, asiento.sosSuperOferta(vip));
//	}
//	@Test
//	public void esSuperOfertaElDeClaseEjecutivaYPrecio3Lucas(){
//		Usuario vip=new Usuario(null,null,null);
//		vip.setPerfil(new VIP());
//		Asiento asiento= new Asiento("codigo","3000","E","C","D",null,null,null,null,null,null,null,null,0,companias.getCompanias().get(0));
//		Assert.assertEquals(true, asiento.sosSuperOferta(vip));
//	}
	
	@Test
	public void vueloABarcelona() throws ConversionException{
		Usuario user = new Usuario(null,null,null);
		user.setPerfil(new VIP());
		user.obtenerPosiblesViajes("EZE",null,null,null,null,null,compania);
		Assert.assertEquals(6, user.getAsientosBusqueda().size());
	}
	
	public void vueloConTodosLosDatos() throws ConversionException{
		Usuario user = new Usuario(null,null,null);
		user.setPerfil(new VIP());
		user.obtenerPosiblesViajes("EZE","USA","20/12/2012","14:00","21/12/2012","02:25",compania);
		Assert.assertEquals(1, user.getAsientosBusqueda().size());
	}
	
	public void vueloConDistintoFormatoDeFecha() throws ConversionException{
		Usuario user = new Usuario(null,null,null);
		user.setPerfil(new VIP());
		user.obtenerPosiblesViajes("Porto Alegre","Moscu","06-06-2012",null,"08/06/2012",null,compania);
		Assert.assertEquals(1, user.getAsientosBusqueda().size());
	}
}
